package cn.qdu.service;

import cn.qdu.dao.DBUtil;
import cn.qdu.dao.UserDao;
import cn.qdu.model.User;
import cn.qdu.util.MD5Util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class UserService {
    private UserDao userDao = new UserDao();

    // 获取用户的好友数量
    public int getFriendCount(String userId) {
        try {
            return userDao.getFriendCount(userId);
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }
    }

    // 获取用户的未读好友请求数量
    public int getUnreadFriendRequests(String userId) {
        try {
            return userDao.getUnreadFriendRequests(userId);
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }
    }

    // 获取用户的日志数量（新增方法）
    public int getUserPostCount(String userId) {
        try {
            return userDao.getUserPostCount(userId);
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }
    }

    public List<User> getRecommendedFriends(String userId, int limit) {
        try {
            return userDao.getRecommendedFriends(userId, limit);
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    //用户注册
    // 在UserService的register方法中，添加日志输出
    public boolean register(User user) {
        try {
            System.out.println("进入 UserService 的 register 方法，准备检查唯一性");
            // 检查唯一性约束
            if (userDao.isUserIdExist(user.getUserId())) {
                System.out.println("用户ID已存在: " + user.getUserId());
                return false;
            }
            if (userDao.isNicknameExist(user.getNickname())) {
                System.out.println("昵称已存在: " + user.getNickname());
                return false;
            }
            if (userDao.isPhoneExist(user.getPhone())) {
                System.out.println("手机号已存在: " + user.getPhone());
                return false;
            }
            if (userDao.isEmailExist(user.getEmail())) {
                System.out.println("邮箱已存在: " + user.getEmail());
                return false;
            }

            // 密码加密
            System.out.println("开始密码加密");
            user.setPassword(MD5Util.encrypt(user.getPassword()));

            System.out.println("调用 UserDao 的 register 方法");
            return userDao.register(user);
        } catch (SQLException e) {
            // 详细打印 SQL 异常，方便定位数据库操作问题
            e.printStackTrace();
            return false;
        }
    }


    // 用户登录
    public User login(String account, String password) {
        try {
            // 注意：password 应该已经是加密后的，所以这里不再加密
            User user = userDao.login(account, password);
            if (user != null) {
                user.setPostCount(userDao.getUserPostCount(user.getUserId()));
            }
            return user;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }


    // 更新用户信息
    public boolean updateUser(User user) {
        try {
            return userDao.updateUser(user);
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    // 更新用户头像
    public boolean updateAvatar(String userId, String avatarPath) {
        try {
            return userDao.updateAvatar(userId, avatarPath);
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    // 获取用户信息
    public User getUserById(String userId) {
        try {
            User user = userDao.getUserById(userId);
            if (user != null) {
                user.setPostCount(userDao.getUserPostCount(userId));
            }
            return user;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    // 搜索用户
    public List<User> searchUsers(String keyword, String currentUserId) {
        try {
            return userDao.searchUsers(keyword, currentUserId);
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
}